// 入口文件，初始化一个基本的项目服务器
// 导入express
const express = require('express')

// 解决跨域问题cors
// 导入并配置cors中间件
// 导入
const cors = require('cors')

// 创建express服务器实例
const app = express()

// 引入body-parser
const bodyParser = require('body-parser')

// 导入解析token中间件
const expressJwt = require('express-jwt')

// 将cors注册为全局中间件
app.use(cors())

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))

// // 解析token的中间件
// // 身份认证以/api开始请求的接口不需要token认证
// app.use(expressJwt({ secret: 'secret' }).unless({
//     path: ['/^\/api\//']
// }))



// 配置解析表单数据的中间件，注意：只能解析application/x-www-form-urlencoded 格式的表单数据
app.use(express.urlencoded({ extended: false }))

app.use((req, res, next) => {
    // 错误
    res.ResData = function(err, status = 1, data = {}) {
        res.send({
            data,
            meta: {
                status,
                msg: err instanceof Error ? err.message : err
            }
        })
    }
    next()
})

// 定义一个错误中间件
// 问题
app.use((err, req, res, next) => {
    // 获取捕获信息
    if (err.name === 'UnauthorizedError')
        return res.ResData("身份认证失败")
})

// 导入并注册用户路由模块
const userRouter = require('./router/user')
app.use('/api/private/v1', userRouter)

const menuRouter = require('./router/menu')
app.use('/api/private/v1', menuRouter)

const usersRouter = require('./router/users')
app.use('/api/private/v1', usersRouter)

// 权限
const authorization = require('./router/authorization')
app.use('/api/private/v1', authorization)

// 商品分类
const getCategories = require('./router/categories')
app.use('/api/private/v1', getCategories)
    //上传文件
const uploadRouter = require('./router/upload')
    // app.use('/tmp_uploads', express.static('tmp_uploads'))
app.use('/api/private/v1', uploadRouter)
const reportsRouter = require('./router/reports')
app.use('/api/private/v1', reportsRouter)
const goods = require('./router/goods')
app.use('/api/private/v1', goods)
const order = require('./router/order')
app.use('/api/private/v1', order)
app.listen(8888, () => {
    console.log("http://127.0.0.1:8888/api/private/v1");
})